<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>MIDI Machine Control</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/MIDI_Machine_Control"> <link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-MIDI_Machine_Control rootpage-MIDI_Machine_Control skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">MIDI Machine Control</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><p><b>MIDI Machine Control</b>, or MMC, a subset of the <a href="MIDI" title="MIDI">MIDI</a> specification, provides specific commands for controlling recording equipment such as multi-track recorders. MMC messages can be sent along a standard MIDI cable for remote control of such functions as Play, Fast Forward, Rewind, Stop, Pause, and Record. These are "<a href="MIDI#System_Exclusive_messages" title="MIDI">System Exclusive</a>" (SysEx) messages, specifically Real Time Universal SysEx messages.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="MIDI_Universal_Real_Time_SysEx_message_format">MIDI Universal Real Time SysEx message format</h2></div>
<p>MIDI includes System Exclusive messages that are extensions of the MIDI format implemented by MIDI manufacturers. Some of the extensions, the "Universal" ones, are a set of the same functions that different manufacturers can implement differently in detail. Some of them are Non Real Time, with no reliable delivery timing. Others are Real Time, including MMC, so they are more reliably delivered when expected. SysEx messages start with (<a href="Hexadecimal" title="Hexadecimal">hexadecimal</a>) F0 and end with F7. Universal Real Time SysEx messages start with F0, followed by 7F, then include other fields before the terminating F7.
</p><p>The following shows Universal Real Time SysEx message format (all numbers hexadecimal):
</p>
<dl><dd><code>F0 7F <Device-ID> <Sub-ID#1> [<Sub-ID#2> [<parameters>]] F7</code></dd></dl>
<p>where <code>Device-ID</code> is:
</p>
<dl><dd><code>MMC device's ID#; value 00-7F (7F = all devices); AKA "channel number"</code></dd></dl>
<p>and <code>Sub-ID#1:</code> is one of the following values. The bolded values are MIDI Machine Control related:
</p>
<table class="toccolours">
<tbody><tr>
<td>01 = Long Form MTC
</td></tr>
<tr>
<td>02 = MIDI Show Control
</td></tr>
<tr>
<td>03 = Notation Information
</td></tr>
<tr>
<td>04 = Device Control
</td></tr>
<tr>
<td>05 = Real Time MTC Cueing
</td></tr>
<tr>
<td><b>06 = MIDI Machine Control Command</b>
</td></tr>
<tr>
<td><b>07 = MIDI Machine Control Response</b>
</td></tr>
<tr>
<td>08 = Single Note Retune
</td></tr></tbody></table>
<div class="mw-heading mw-heading2"><h2 id="MMC_message_format">MMC message format</h2></div>
<p>An MMC message is either an MMC command (Sub-ID#1=06) or an MMC response (Sub-ID#1=07). As a SysEx message it is formatted (all numbers hexadecimal):
</p>
<dl><dd><code>F0 7F <Device-ID> <06|07> [<Sub-ID#2> [<parameters>]] F7</code></dd></dl>
<dl><dd><code>Device-ID: MMC device's ID#; value 00-7F (7F = all devices); AKA "channel number"</code></dd></dl>
<pre>Sub-ID#1: 06 = command
Sub-ID#2:
01 Stop
02 Play
03 Deferred Play (play after no longer busy)
04 Fast Forward
05 Rewind
06 Record Strobe (AKA [[Punch in/out|Punch In]])
07 Record Exit (AKA [[Punch out (music)|Punch out]])
08 Record Pause
09 Pause (pause playback)
0A Eject (disengage media container from MMC device)
0B Chase
0D MMC Reset (to default/startup state)
40 Write (AKA Record Ready, AKA Arm Tracks)
parameters: <length1> 4F <length2> <track-bitmap-bytes>
44 Goto (AKA Locate)
parameters: <length>=06 01 <hours> <minutes> <seconds> <frames> <subframes>
47 Shuttle
parameters: <length>=03 <sh> <sm> <sl> (MIDI Standard Speed codes)
</pre>
<pre>Sub-ID#1: 07 = response
Sub-ID#2: response state
parameters: values detailing response state
</pre>
<div class="mw-heading mw-heading2"><h2 id="MMC_commands">MMC commands</h2></div>
<p>MMC Commands are either MMC transport messages containing one <a href="Byte" title="Byte">byte</a> representing the command, or other types containing the command byte followed by parameter bytes. Some parameters are lengths of collections of bytes in the message, some parameters are constants associated with the command, other parameters are variable data values specifying command execution.
</p>
<div class="mw-heading mw-heading3"><h3 id="Record_Ready">Record Ready</h3></div>
<p>The Record Ready (Arm Tracks) message will record-enable tracks. It is formatted (all numbers hexadecimal):
</p>
<pre>F0 7F <Device-ID> 06 40 <length1> 4F <length2> <track-bitmap> F7
</pre>
<pre>length1: number of bytes between length1 and F7
length2: number of bytes in the track bitmap
track-bitmap: Each track is assigned a bit in the track bitmap.
</pre>
<p>To set a track, you must know both the byte in which the track's bit lives, and also the bit corresponding to that track. Note that each byte can only hold 7 tracks.
</p>
<pre>Track 1: byte 1 + 0x20
Track 2: byte 1 + 0x40
Track 3: byte 2 + 0x01
Track 4: byte 2 + 0x02
Track 5: byte 2 + 0x04
Track 6: byte 2 + 0x08
Track 7: byte 2 + 0x10
Track 8: byte 2 + 0x20
Track 9: byte 2 + 0x40
Track 10: byte 3 + 0x01
and so on.
</pre>
<div class="mw-heading mw-heading3"><h3 id="Goto/Locate">Goto/Locate</h3></div>
<p>The Goto (AKA Locate) message cues recording or playback to an <a href="SMPTE_timecode" title="SMPTE timecode">SMPTE</a> time (a specific hour, minute, second, SMPTE frame number, and subframe code). It is formatted (all numbers hexadecimal):
</p>
<pre>F0 7F <Device-ID> 06 44 <length>=06 01 <hr> <mn> <sc> <fr> <ff> F7
</pre>
<pre>Sub-ID#2 =44: LOCATE command
length: 06 Data byte count (always six bytes)
subcommand: 01 TARGET
hr: hours and type (as with MTC Fullframe); values 0-17 (= 0-23 decimal)
mn: minutes; values 0-3B (= 0-59 decimal)
sc: seconds; values 0-3B (= 0-59 decimal)
fr: frames; values 0-1D (= 0-29 decimal)
ff: sub-frames / fractional frames (leave at zero if un-sure); values 0-63 (= 0-99 decimal)
</pre>
<p>(some manufacturers encode the subframe value differently at different frame rates to indicate subframe 0)
</p>
<div class="mw-heading mw-heading3"><h3 id="Shuttle">Shuttle</h3></div>
<p>Both forward and backward shuttling share the same MMC message; direction is encoded as a sign value. It is formatted (all numbers hexadecimal):
</p>
<pre>F0 7F <Device0ID> 06 47 <length=03> <sh> <sm> <sl> F7
Note: sh, sm and sl are defined as Standard Speed in the MIDI 1.0 Recommended Practice RP-013.
sh = Nominal Integer part of speed value: 0 g sss ppp
g = sign (1 = reverse)
sss = shift left count (see below)
ppp = most significant bits of integer multiple of play-speed
sm = MSB of nominal fractional part of speed value: 0 qqqqqqq
sl = LSB of nominal fractional part of speed value: 0 rrrrrrr
Speed values per shift left count:
BINARY REPRESENTATION USABLE RANGES (DECIMAL)
Integer multiple Fractional part Integer Fractional
sss of play speed of play speed range resolution
000 ppp - qqqqqqqrrrrrrr 0-7 1/16384
001 pppq - qqqqqqrrrrrrr 0-15 1/8192
010 pppqq - qqqqqrrrrrrr 0-31 1/4096
011 pppqqq - qqqqrrrrrrr 0-63 1/2048
100 pppqqqq - qqqrrrrrrr 0-127 1/1024
101 pppqqqqq - qqrrrrrrr 0-255 1/512
110 pppqqqqqq - qrrrrrrr 0-511 1/256
111 pppqqqqqqq - rrrrrrr 0-1023 1/128
</pre>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<ul><li><a rel="nofollow" class="external text" href="https://midi.org/specifications">MIDI Standard Document</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20160601121904/https://www.midi.org/specifications">Archived</a> 2016-06-01 at the <a href="Wayback_Machine" title="Wayback Machine">Wayback Machine</a></li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2024-12-04" href="https://en.wikipedia.org/wiki/?title=MIDI_Machine_Control&oldid=1261146626">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
</body></html>